#pragma once

#include "Hazel/src/Hazel/Render/Texture.h"
#include <glad/glad.h>

namespace Hazel
{

class OpenGLTexture2D : public Texture2D
{
  public:
    OpenGLTexture2D(const std::string &filepath);
    OpenGLTexture2D(uint32_t width, uint32_t height);
    virtual ~OpenGLTexture2D() override;

    virtual uint32_t GetWidth() const override
    {
        return m_Width;
    }
    virtual uint32_t GetHeight() const override
    {
        return m_Height;
    }
    virtual uint32_t GetRendererID() const override
    {
        return m_RendererID;
    }
    virtual void SetData(void *data, uint32_t size) override;

    virtual void Bind(uint32_t slot = 0) const override;
    virtual bool operator==(const Texture &other) const override;

  private:
    std::string m_Path;
    uint32_t m_Width, m_Height;

    uint32_t m_RendererID;

    GLenum m_InterFormate, m_DataFormat;
};
} // namespace Hazel